package ucla.axelia.vista.componentes;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.extras.app.TabPane;
import nextapp.echo2.extras.app.layout.TabPaneLayoutData;

import com.obelisco.vista.componentes.ComponenteDatosListener;
import com.obelisco.vista.componentes.TipoFuncion;


public class PanePestanaGeneral extends ContentPane implements ComponenteDatosListener {

	private Map<String, ComponenteDatosListener> pestanasMostrar = new HashMap<String, ComponenteDatosListener>();
	
	public PanePestanaGeneral() {
		super();
	}
	
	private void initComponents() {
		removeAll();
		TabPane tabPane = new TabPane();
		tabPane.setStyleName("Obelisco.TabPaneAreaTrabajo");
		this.add(tabPane);
		for (String clave : pestanasMostrar.keySet()) {
			Object componente = pestanasMostrar.get(clave);
			if (componente instanceof Component) {
				Component component = (Component) componente;					
				TabPaneLayoutData contenedorLayoutData = new TabPaneLayoutData();
				contenedorLayoutData.setTitle(clave);
				component.setLayoutData(contenedorLayoutData);
				tabPane.add(component);
			}
		}
	}
	
	public void onCancelar() {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onCancelar();
		}
	}

	public void onConfirmarCambios(Object objeto, TipoFuncion tipo, String nombre) {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onConfirmarCambios(objeto, tipo, nombre);
		}
	}

	public void onConfirmarEliminacion(Object object) {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onConfirmarEliminacion(object);
		}
	}

	public void onConsultar(Object objeto) {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onConsultar(objeto);
		}
	}

	public void onCrear() {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onCrear();
		}
	}

	public void onFuncionPersonalizada(Object objeto, TipoFuncion funcion, String nombre) {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onFuncionPersonalizada(objeto, funcion, nombre);
		}
	}

	public void onIncluir(Object objeto) {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onIncluir(objeto);
		}
	}

	public void onInicializar() {
		// TODO Auto-generated method stub
		initComponents();
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onInicializar();
		}
	}

	public void onListaParametros(List listaParametros) {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onListaParametros(listaParametros);
		}
	}

	public void onModificar(Object objeto) {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onModificar(objeto);
		}
	}

	public void onObjetoEntidad(Object objeto) {
		// TODO Auto-generated method stub
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			componenteDatosListener.onObjetoEntidad(objeto);
		}
	}

	public boolean onValidarDatos(Object objeto, TipoFuncion tipo, String nombre) {
		// TODO Auto-generated method stub
		boolean validarDatos = true;
		for (String clave : pestanasMostrar.keySet()) {
			ComponenteDatosListener componenteDatosListener = pestanasMostrar.get(clave);
			//componenteDatosListener.onObjetoEntidad(objeto);
			if (!componenteDatosListener.onValidarDatos(objeto, tipo, nombre)) {
				validarDatos = false;
			}
		}
		return validarDatos;
	}

	public void setEnabled(boolean valor) {
		Component hijo = this.getComponent(0);
		while ((hijo != null) && (!(hijo instanceof ComponenteDatosListener))) {
			hijo = hijo.getComponent(0);
		}
		for (int i=0; i<hijo.getParent().getComponentCount(); i++) {
			hijo.getParent().getComponent(i).setEnabled(valor);
		}
	}

	// Getter y Setter
	public Map<String, ComponenteDatosListener> getPestanasMostrar() {
		return pestanasMostrar;
	}

	public void setPestanasMostrar(Map<String, ComponenteDatosListener> pestanasMostrar) {
		this.pestanasMostrar = pestanasMostrar;
	}

}